#ifndef KC_SSLSERVERSESSION_H__KC
#define KC_SSLSERVERSESSION_H__KC

#include <string>
#include <list>
#include <boost/noncopyable.hpp>
#include <openssl/bio.h>
#include <openssl/ssl.h>
#include "../CommError.h"

namespace kc_sf
{
	/*
	 * Inicjalizuje sesje SSL w przypadku, gdy wczesniej
	 * ustanowiono juz nieszyfrowane polaczenie na
	 * gniazdku przekazanym jako parametr w konstruktorze.
	 */
	class SSLServerSession : public boost::noncopyable
	{
		public:

			SSLServerSession( int accept_socket );
			~SSLServerSession();

			SSL * acceptClient();
			void close();

		private:

			int ssl_accept_socket;
			SSL *ssl_accept_ssl;
			SSL_CTX *ssl_ctx;

			void throwSSLError( CommErrorType type, int err, const std::string &err_msg );
	};

	void sigpipeHandle (int x);
	int getPasswordCallback (char *buf, int size, int rwflag, void *userdata);
}

#endif /* KC_SSLSERVERSESSION_H__KC */
